Related articles

*   [Downgrading packages](/index.php/Downgrading_packages "Downgrading packages")

The **Arch Linux Archive** (a.k.a **ALA**), formerly known as **Arch Linux Rollback Machine** (a.k.a **ARM**), stores *official repositories snapshots*, *iso images* and *bootstrap tarballs* across time.

**You can use it to**

*   Downgrade to a previous version of one package (last version is broken, I want the previous one)
*   Restore all your packages at a precise moment (my system is broken, I want to go back 2 months ago)
*   Find a previous version of an ISO image

Packages are only kept for a few years, afterwards they are moved to the [Arch Linux Historical Archive](#Historical_Archive) on archive.org.

## Contents

*   [1 Location](#Location)
*   [2 Directories](#Directories)
    *   [2.1 /repos](#.2Frepos)
    *   [2.2 /packages](#.2Fpackages)
    *   [2.3 /iso](#.2Fiso)
*   [3 FAQ](#FAQ)
    *   [3.1 How to downgrade one package](#How_to_downgrade_one_package)
    *   [3.2 How to restore all packages to a specific date](#How_to_restore_all_packages_to_a_specific_date)
*   [4 Historical Archive](#Historical_Archive)
    *   [4.1 Finding packages in the Historical Archive](#Finding_packages_in_the_Historical_Archive)
    *   [4.2 Downloading packages from the Historical Archive](#Downloading_packages_from_the_Historical_Archive)
    *   [4.3 Redirecting package downloads to the Historical Archive](#Redirecting_package_downloads_to_the_Historical_Archive)
*   [5 History](#History)

## Location

The Arch Linux Archive is available at [https://archive.archlinux.org/](https://archive.archlinux.org/).

The [source code](https://github.com/seblu/archivetools) is also available for setting up your own mirror.

## Directories

The **Archive** is split into 3 main directories detailed below.

```
├── iso
├── packages
└── repos

```

### /repos

The [repos](https://archive.archlinux.org/repos) directory contains daily snapshots of official mirror organized by date like in the following example.

```
repos
├── 2013
│   ├── 08
│   │   └── 31
│   │       ├── community
│   │       ├── community-staging
│   │       ├── community-testing
│   │       ├── core
│   │       ├── extra
│   │       ├── gnome-unstable
│   │       ├── kde-unstable
│   │       ├── lastsync
│   │       ├── multilib
│   │       ├── multilib-staging
│   │       ├── multilib-testing
│   │       ├── pool
│   │       ├── staging
│   │       └── testing
│   ├── 09
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │   ├── 21
│   │   └── 22
│   ├── 10
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │
│   ├── 11
│   └── 12
├── 2014
│   ├── 01
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │
│   ├── 02
│   ├── 03
│   ├── ...
│   └── 09
│       ├── 01
│       ├── ...
│       └── 28
├── last
├── month
└── week

```

Note: The last 3 special directories (**last**, **week** and **month**) which links respectively to the last synced repository, to the last monday and to the first of the current month.

### /packages

The [packages](https://archive.archlinux.org/packages) directory contains all versions of each package with their signatures. One directory by package and package directories are grouped by their first letter.

```
├── packages
│   ├── a
│   │   ├── awesome
│   │   │   ├── awesome-3.5.0-1-i686.pkg.tar.xz
│   │   │   ├── awesome-3.5.0-1-i686.pkg.tar.xz.sig
│   │   │   ├── awesome-3.5.0-1-x86_64.pkg.tar.xz
│   │   │   ├── awesome-3.5.0-1-x86_64.pkg.tar.xz.sig
│   │   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz
│   │   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz.sig
│   │   │   ├── ...
│   │   │ 
│   │   ├── ...
│   │   ├── awstats
│   │   └── axel
│   │   
│   ├── b
│   ├── ...
│   └── z

```

You can use the magic subdirectory [.all](https://archive.archlinux.org/packages/.all) to access all packages by their name. It acts as a flat directory containing all versions of every package.

```
├── packages
│   ├── .all
│   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz
│   │   ├── ...
│   │   ├── zsh-5.0.2-3-i686.pkg.tar.xz
│   │   ├── zsh-5.0.2-4-i686.pkg.tar.xz
│   │   └── ...

```

You can download the full package list (there are over a hundred thousand packages) as a compressed index: [index.0.xz](https://archive.archlinux.org/packages/.all/index.0.xz).

 `$ curl https://archive.archlinux.org/packages/.all/index.0.xz | unxz` 
```
0ad-a14-1-i686
0ad-a14-1-x86_64
0ad-a14-2-i686
...
zziplib-0.13.62-1-x86_64
zziplib-0.13.62-2-i686
zziplib-0.13.62-2-x86_64
```

### /iso

The [iso](https://archive.archlinux.org/iso) directory contains official ISO images and bootstrap tarballs sorted by release date.

```
├── 2014.09.03
├── 2014.10.01
├── 2014.11.01
├── 2014.12.01
├── 2015.07.01
├── 2015.08.01
├── 2015.09.01
└── 2017.04.01
    ├── arch
    ├── archlinux-2017.04.01-x86_64.iso
    ├── archlinux-2017.04.01-x86_64.iso.sig
    ├── archlinux-2017.04.01-x86_64.iso.torrent
    ├── archlinux-bootstrap-2017.04.01-x86_64.tar.gz
    ├── archlinux-bootstrap-2017.04.01-x86_64.tar.gz.sig
    ├── md5sums.txt
    └── sha1sums.txt

```

## FAQ

### How to downgrade one package

Find the package you want under [/packages](#.2Fpackages) and let pacman fetch it for installation. For example:

```
# pacman -U https://archive.archlinux.org/packages/ ... *packagename*.pkg.tar.xz

```

Letting pacman fetch it will automatically download the package's detached *.sig* file and verify it according to `/etc/pacman.conf` settings.

Alternatively, download and install the package manually using `pacman -U`.

See also [Downgrading packages#Automation](/index.php/Downgrading_packages#Automation "Downgrading packages") for tools that simplify the process.

### How to restore all packages to a specific date

To restore all packages to their version at a specific date, let's say 30 March 2014, you have to direct [pacman](/index.php/Pacman "Pacman") to this date, by editing your `/etc/pacman.conf` and use the following server directive:

```
[core]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

[extra]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

[community]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

```

or by replacing your `/etc/pacman.d/mirrorlist` with the following content:

```
##                                                                              
## Arch Linux repository mirrorlist                                             
## Generated on 2042-01-01                                                      
##
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

```

Then update the database and force downgrade:

```
# pacman -Syyuu

```

**Note:** It's [not safe](/index.php/Partial_upgrades "Partial upgrades") to mix Archive and up-to-date mirrors. In case of a download failure, you will fall-back on an upstream package and you will have packages not from the same epoch in the rest of the system.

## Historical Archive

Maintaining the Arch Linux Archive consumes significant amount of resources, so old packages are cleaned up from time to time.

Before removing them, old packages are uploaded to a [dedicated collection "Arch Linux Historical Archive" on archive.org](https://archive.org/details/archlinuxarchive).

The Historical Archive does not provide a way to access a "snapshot" of Arch packages at a given point in time. However, there is a redirection on `archive.archlinux.org` so that downloads for old packages are redirected to the Historical Archive on `archive.org`. There should be no visible impact from the user side, except from the fact that `archive.org` is generally quite slow for downloading.

### Finding packages in the Historical Archive

The **Arch Linux Historical Archive** collection has an index of all packages: [https://archive.org/details/archlinuxarchive](https://archive.org/details/archlinuxarchive)

It is also possible to directly access a package by its **identifier**. The general pattern for identifiers is:

```
archlinux_pkg_<sanitized package name>

```

To obtain the **sanitized** package name, simply replace any `@`, `+` or `.` character in the package name by an underscore `_`.

For instance, the identifier for [lucene++](https://www.archlinux.org/packages/?name=lucene%2B%2B) is `archlinux_pkg_lucene__`.

You can then access the details page of a package via its identifier, for instance: [https://archive.org/details/archlinux_pkg_lucene__](https://archive.org/details/archlinux_pkg_lucene__)

It is also possible to run searches with the [archive.org Python client](https://github.com/jjjake/internetarchive):

```
$ ia search subject:"archlinux package" subject:'mysql'                                                                                       
{"identifier": "archlinux_pkg_ejabberd-mod_mysql"}                                                                                                           
{"identifier": "archlinux_pkg_ejabberd-mod_mysql-svn"}
{"identifier": "archlinux_pkg_gambas3-gb-db-mysql"}
{"identifier": "archlinux_pkg_gambas3-gb-mysql"}
{"identifier": "archlinux_pkg_libgda-mysql"}

```

### Downloading packages from the Historical Archive

All available package versions (and their signature) can be accessed via the download page of a package: [https://archive.org/download/archlinux_pkg_lucene__](https://archive.org/download/archlinux_pkg_lucene__)

Here are a few example ways to fetch a package:

```
$ wget https://archive.org/download/archlinux_pkg_cjdns/cjdns-16.1-3-x86_64.pkg.tar.xz{,.sig}
$ pacman -U https://archive.org/download/archlinux_pkg_cjdns/cjdns-16.1-3-x86_64.pkg.tar.xz

```

Note that if you use pacman, you have to figure out the dependencies yourself.

It is also possible to use the [archive.org Python client](https://github.com/jjjake/internetarchive):

```
# Download a specific version of a package
$ ia download archlinux_pkg_cjdns cjdns-16.1-3-x86_64.pkg.tar.xz{,.sig}

# Download all x86_64 versions of a package, with signatures
$ ia download archlinux_pkg_cjdns --glob="*x86_64.pkg.tar.xz*"

```

### Redirecting package downloads to the Historical Archive

To redirect downloads for old packages to `archive.org`, here is the Nginx configuration on orion:

```
location ~ /repos/201[3456]/.*/.*\.pkg\.tar\.xz(\.sig)? {
        # Tricky regexp to separate the pkgname from the pkgver (both can contain "-")
        rewrite ^/repos/.*/((.*?)-[^-/]+-[0-9]+-[^-]+.*\.pkg\.tar\.xz(\.sig)?)$ /archive.org/archlinux_pkg_$2/$1 last;
}

# archive.org download URLs look like:
# https://archive.org/download/archlinux_pkg_lucene__/lucene++-1.4.2-3-i686.pkg.tar.xz
# We need to remove @.+ in the identifier (archlinux_pkg_*) but keep it in the filename at the end.
location /archive.org/ {
        # Rewrite @, + and . into _
        # This is recursive so it will work even for multiple replacement,
        # with up to 10 replacements for each character (nginx recursion limit). 
        # Idea from https://stackoverflow.com/a/15934256
        rewrite ^/archive\.org/([^@]*)@(.*)/(.*)$   /archive.org/$1_$2/$3;
        rewrite ^/archive\.org/([^\.]*)\.(.*)/(.*)$ /archive.org/$1_$2/$3;
        rewrite ^/archive\.org/([^\+]*)\+(.*)/(.*)$ /archive.org/$1_$2/$3;
        # Once there are no more @.+ in the identifier part, redirect to archive.org
        rewrite ^/archive\.org/([^@\+\.]*/.*)$ https://archive.org/download/$1 permanent;
}

```

## History

*   The original ARM (*Archlinux Rollback Machine*) was closed on 2013-08-18.[[1]](https://bbs.archlinux.org/viewtopic.php?pid=1313360#p1313360)
*   The new one is hosted on [seblu.net](http://seblu.net) since 2013-08-31.
*   New URL and closing the old ARM hierarchy on 2015-10-13\. A new software, [agetpkg-git](https://aur.archlinux.org/packages/agetpkg-git/) was introduced.
*   Moved to [archive.archlinux.org](https://archive.archlinux.org) on 2015-12-19.[[2]](https://lists.archlinux.org/pipermail/arch-dev-public/2015-December/027635.html)
*   Old packages from 2013-2016 uploaded to [archive.org](https://archive.org/details/archlinuxarchive) on 2018-06-05.